#ifndef SLIST_H_
#define SLIST_H_

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cassert>

typedef int SLTDataType;

class SList
{
private:
    struct SListNode
    {
        SLTDataType data; //数据域
        SListNode *next;  //指针域
    };

public:
    SListNode *sn;
    SList(SListNode *s = NULL);                                         //默认构造
    void SListPrint(SListNode *phead);                                  //显示链表数据
    SListNode *BuySListNode(SLTDataType x);                             //创建新节点
    void SListPushBack(SListNode *&phead, SLTDataType x);               //尾插
    void SListPopBack(SListNode *&phead);                               //尾删
    void SListPushFront(SListNode *&phead, SLTDataType x);              //头插
    void SListPopFront(SListNode *&phead);                              //头删
    SListNode *SListFind(SListNode *phead, SLTDataType x);              //查找节点
    void SListInsert(SListNode *&phead, SListNode *pos, SLTDataType x); //在pos位置插入数据
    void SListInsertAfter(SListNode *pos, SLTDataType x);               //在pos位置之后插入数据
    void SListErase(SListNode *&phead, SListNode *pos);                 //删除pos位置
    void SListEraseAfter(SListNode *pos);                               //删除pos位置后面的节点
    void SListDestory(SListNode *&phead);                               //释放链表
};
#endif